package fun.yao.common.uitls;

import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Properties;

public class ConfigUtil {

    /**文件路径*/
    public static String GESS_PROPERTIES_FILE_NAME = "common.properties";

    /**
     * <p>功能描述:从指定文件中取得参数值 </p>
     * <p>参数介绍:键值 </p>
     */
    private static HashMap<String,Object[]> propsMap = new HashMap<String,Object[]>();
    public static String getConfig(String fileName,String keyName)
    {
        Properties props = null;
        boolean bIsNeedLoadCfg = false;

        File cfgFile = new File(fileName);
        if ( cfgFile.exists() == false )
            return "";

        Object[] arrs = propsMap.get(fileName);

        if ( arrs == null )
        {
            bIsNeedLoadCfg = true ;
        }else
        {
            Long lastModify = (Long)arrs[0];
            if ( lastModify.longValue() != cfgFile.lastModified() )
                bIsNeedLoadCfg = true;
            else
                props = (Properties)arrs[1];
        }


        if ( bIsNeedLoadCfg == true )
        {
            FileInputStream fis = null;
            try
            {
                fis = new FileInputStream(cfgFile);
                props = new Properties();
                props.load(fis);
                propsMap.put(fileName, new Object[]{cfgFile.lastModified(),props});
            }catch (Exception e) {
                return "";
            }finally{
                try{
                    if ( fis != null )
                        fis.close();
                }catch(Exception e){;}
            }
        }

        return props.getProperty(keyName, "");
    }

    /**
     * <p>功能描述:从默认配置文件中取得参数值 </p>
     * <p>参数介绍:键值 </p>
     */
    public static String getConfig(String keyName) {
        return ConfigUtil.getConfig(GESS_PROPERTIES_FILE_NAME,keyName);
    }

    /**
     * <p>功能描述:从默认配置文件中取得字符串的值 </p>
     * <p>参数介绍:键值,默认值 </p>
     */
    public static String getConfigByString(String keyName,String defaultValue){
        String value = getConfig(keyName);
        if ( value != null && value.length() > 0 )
            return value.trim();
        else
            return defaultValue;
    }

    /**
     * <p>功能描述:从默认配置文件中取得字符串的值 </p>
     * <p>参数介绍:键值</p>
     */
    public static String getConfigByString(String keyName){
        return getConfig(keyName);
    }

    /**
     * <p>功能描述:从默认配置文件中取得短整型的值 </p>
     * <p>参数介绍:键值,默认值 </p>
     */
    public static int getConfigByInt(String keyName,int defaultValue){
        String value = getConfig(keyName);
        if ( value != null && value.length() > 0 )
            return Integer.parseInt(value.trim());
        else
            return defaultValue;
    }

    /**
     * <p>功能描述:从默认配置文件中取得短整型的值 </p>
     * <p>参数介绍:键值</p>
     */
    public static int getConfigByInt(String keyName){
        return Integer.parseInt(getConfig(keyName).trim());
    }

    /**
     * <p>功能描述:从默认配置文件中取得boolean的值 </p>
     * <p>参数介绍:键值 </p>
     */
    public static boolean getConfigByBoolean(String keyName){
        return Boolean.parseBoolean(getConfig(keyName).trim());
    }

    /**
     * <p>功能描述:从默认配置文件中取得boolean的值 </p>
     * <p>参数介绍:键值 </p>
     */
    public static boolean getConfigByBoolean(String keyName,boolean defaultValue)
    {
        String value = getConfig(keyName);
        if ( value != null && value.length() > 0)
            return Boolean.parseBoolean(value);
        else
            return defaultValue;
    }

    /**
     * <p>功能描述:从默认配置文件中取得长整型的值 </p>
     * <p>参数介绍:键值,默认值 </p>
     */
    public static long getConfigByLong(String keyName,long defaultValue){
        String value = getConfig(keyName);
        if ( value != null && value.length() > 0 )
            return Long.parseLong(value.trim());
        else
            return defaultValue;
    }

    /**
     * <p>功能描述:从默认配置文件中取得长整型的值 </p>
     * <p>参数介绍:键值</p>
     */
    public static long getConfigByLong(String keyName){
        return Long.parseLong(getConfig(keyName));
    }

    /**
     * <p>功能描述:从默认配置文件中取得符点型的值 </p>
     * <p>参数介绍:键值,默认值 </p>
     */
    public static float getConfigByFloat(String keyName,float defaultValue){
        String value = getConfig(keyName);
        if ( value != null && value.length() > 0)
            return Float.parseFloat(value.trim());
        else
            return defaultValue;
    }

    public static float getConfigByFloat(String keyName){
        return Float.parseFloat(getConfig(keyName));
    }

}
